import { useAuthStore } from '@/state/modules/auth'
import { Router } from 'uni-mini-router/lib/interfaces'

export function createRouterGuard(router: Router) {
  createBeforeEachGuard(router)
  createAfterEachGuard(router)
}

function createBeforeEachGuard(router: Router) {
  router.beforeEach((to, _, next) => {
    const authStore = useAuthStore()
    // @ts-ignore
    if (to && to?.meta?.ignoreAuth) {
      // 如果目标路由忽略验证直接跳转
      next()
    } else if (!authStore.isLogin && to && to.name !== 'Login') {
      // 如果没有登录且目标路由不是登录页面则跳转到登录页面
      // 将目标路由和参数传入登录页面，登录成功后直接跳转到目标路由，优化体验
      next({
        name: 'Login',
        // @ts-ignore
        params: { redirect: to.name!, tabBar: to?.meta?.tabBar, ...to.query },
        navType: 'push'
      })
    } else if (authStore.isLogin && to && to.name === 'Login') {
      // 如果已经登录且目标页面是登录页面则跳转至首页
      next({ name: 'Home', navType: 'replaceAll' })
    } else {
      next()
    }
  })
}

function createAfterEachGuard(router: Router) {
  router.afterEach(to => {
    // @ts-ignore
    if (to && to?.meta?.ignoreAuth) return
    const authStore = useAuthStore()
    if (!authStore.isLogin && to && to.name !== 'Login') {
      // 如果没有登录且目标路由不是登录页面则跳转到登录页面
      // @ts-ignore
      router.push({ name: 'Login', params: { tabBar: to?.meta?.tabBar, ...to.query } })
    } else if (authStore.isLogin && to && to.name === 'Login') {
      // 如果已经登录且目标页面是登录页面则跳转至首页
      router.replaceAll({ name: 'Home' })
    }
  })
}
